package com.huishu.goods.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huishu.commons.pojo.Result;
import com.huishu.commons.pojo.dto.DeductionStockDTO;
import com.huishu.commons.pojo.vo.CartItemGoodsVO;
import com.huishu.goods.pojo.dto.CategoryProductDTO;
import com.huishu.goods.pojo.dto.ProductCreateDTO;
import com.huishu.goods.pojo.dto.ProductPageDTO;
import com.huishu.goods.pojo.dto.ProductUpdateDTO;
import com.huishu.goods.pojo.model.ProductDO;
import com.huishu.goods.pojo.model.ProductGiveDO;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author generator@ljj
 * @since 2023-04-08
 */
public interface ProductService extends IService<ProductDO> {

    /**
     * 获取商品分类页面数据
     * @param categoryProductDTO
     * @return
     */
    Result categoryProduct(CategoryProductDTO categoryProductDTO);

    /**
     * 查询重磅新品
     * @param categoryProductDTO
     * @return
     */
    Result findNewProductOrBestsellingOrSample(CategoryProductDTO categoryProductDTO);

    /**
     * 商品详情
     * @param id
     * @return
     */
    Result detailed(Long id);

    /**
     * 根据ids查询
     * @return
     */
    Result<List<CartItemGoodsVO>> findCartItemGoods(List<Long> ids);

    /**
     * 扣减库存
     * @param deductionStockDTOS
     * @return
     */
    Result deductionStock(List<DeductionStockDTO> deductionStockDTOS);

    /**
     * 搜索商品
     * @param categoryProductDTO
     * @return
     */
    Result search(CategoryProductDTO categoryProductDTO);


    /**
     * 添加商品
     * @param productCreateDTO
     * @return
     */
    Result create(ProductCreateDTO productCreateDTO);

    /**
     * 修改
     * @param productUpdateDTO
     * @return
     */
    Result modify(ProductUpdateDTO productUpdateDTO);

    /**
     * 设置推荐商品
     * @param productUpdateDTO
     * @return
     */
    Result setRecommen(ProductUpdateDTO productUpdateDTO);

    /**
     * 绑定优惠卷
     * @param id
     * @param couponId
     * @return
     */
    Result bindingCoupon(Long id, Long couponId);

    /**
     * 解除优惠卷
     * @param id
     * @param couponId
     * @return
     */
    Result deleteCoupon(Long id,  Long couponId);

    /**
     * pageList
     * @param productPageDTO
     * @return
     */
    Result pageList(ProductPageDTO productPageDTO);

    /**
     * 查询推荐信息
     * @param id
     * @return
     */
    Result findRecommenInfo(Long id);

    /**
     * 根据id查询
     * @param id
     * @return
     */
    Result findById(Long id);

    /**
     * 根据品类id查询
     * @param categoryId
     * @return
     */
    Result findByCategoryId(Long categoryId);

    /**
     * 查询当前商品绑定的优惠卷
     * @param id
     * @return
     */
    Result findCouponByProductId(Long id);

    /**
     * 删除产品和样品
     * @param id
     * @return
     */
    Result delete(Long id);

    /**
     * 查询所有赠品
     * @return
     */
    Result findGiveAll();

    /**
     * 赠送赠品
     * @param productGives
     * @return
     */
    Result give(List<ProductGiveDO> productGives);

    /**
     * 根据id查询赠送的赠品
     * @param id
     * @return
     */
    Result findGive(Long id);

    /**
     * 获取商品的优惠卷
     * @param id
     * @return
     */
    Result getCouponByGoods(Long id);

    /**
     * 查询购物车推荐数据
     * @return
     */
    Result findCartRecommen();
}
